package com.travelsmart.client.apresentacao.view.subview;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.travelsmart.client.apresentacao.i18n.I18nMessages;
import com.travelsmart.client.apresentacao.view.BaseView;

import com.travelsmart.client.apresentacao.widget.FormTextBox;
import com.travelsmart.client.apresentacao.widget.FormWidget;
import com.travelsmart.client.bean.to.FilterPesquisaHotel;
import com.travelsmart.client.bean.to.QuartoTO;
import com.travelsmart.client.bean.to.ReservaQuartoTO;
import com.travelsmart.client.bean.to.FilterPesquisaHotel.FilterQuarto;

public class ViewListReservaQuarto extends BaseView {
	private final VerticalPanel panelViewListQuarto = new VerticalPanel();;
	private List<ViewQuarto> listQuarto;
	private int num_quarto;
	 

	public ViewListReservaQuarto() {
		super(new HTML(""));
		initWidget(panelViewListQuarto);
	}
	
	public int qtiQuartos(){
		return listQuarto.size();
	}

	public void exec(FilterPesquisaHotel filter) {
		panelViewListQuarto.clear();
		panelViewListQuarto.add(new HTML(I18nMessages.INSTANCE.detalhes_hospedes()));
		HorizontalPanel hpa = null;
		listQuarto = new ArrayList<ViewQuarto>();
		for (int i = 0; i < filter.getListQuarto().size(); i++) {
			num_quarto = (i + 1);
			ViewQuarto formQuarto = new ViewQuarto(num_quarto);
			formQuarto.exec(num_quarto, filter.getListQuarto().get(i));
			listQuarto.add(formQuarto);
			if (i % 2 == 0) {
				hpa = new HorizontalPanel();
				hpa.setWidth("100%");
				panelViewListQuarto.add(hpa);
			}
			hpa.add(formQuarto);
		}
	}
	
	
	
	public boolean validar() {
		boolean retorno = true;
		for (int i = 0; i < listQuarto.size(); i++) {
			ViewQuarto form = listQuarto.get(i);
			retorno = form.validar();
			if (!retorno) {
				break;
			}
		}
		return retorno;
	}
	
	public List<ReservaQuartoTO> criarListReservaQuartoTO(QuartoTO quarto){
		List<ReservaQuartoTO> list = new ArrayList<ReservaQuartoTO>();
		for (int i = 0; i < listQuarto.size(); i++) {
			ViewQuarto formViewQuarto = listQuarto.get(i);
			list.add(formViewQuarto
							.criarReservaQuartoTO(quarto));
		}
		return list;
	}
	

	
	private class ViewQuarto extends BaseView {
		private int qti_adultos;
		private int qti_crianca;

		private FormTextBox txt_nomeHospede;
		private FormTextBox txt_sobrenomeHospede;
		private FormTextBox txt_preferenciaHospede;
		
		private final HTML msg = new HTML();
		private final VerticalPanel vpa = new VerticalPanel();

		public ViewQuarto(Integer num_quarto) {
			super(new HTML(I18nMessages.INSTANCE.quarto1(num_quarto)));
			txt_nomeHospede = new FormTextBox("txt_nomeHospede_" + num_quarto,
					I18nMessages.INSTANCE.help_nome_hospede(num_quarto), 20,
					new FormWidget.HandlerValidation<String>() {
						@Override
						public boolean handle(String valor) {
							boolean retorno = true;
							if (valor == null || valor.trim().equals("")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
												.nome_hospede()));
								retorno = false;
							} else {
								if (valor.length() > 20) {
									msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.nome_hospede(), 20));
									retorno = false;
								}
							}
							return retorno;
						}
					});
			txt_sobrenomeHospede = new FormTextBox("txt_sobrenomeHospede_" + num_quarto,
					I18nMessages.INSTANCE.help_sobrenome_hospede(num_quarto),
					20, new FormWidget.HandlerValidation<String>() {
						@Override
						public boolean handle(String valor) {
							boolean retorno = true;
							if (valor == null || valor.trim().equals("")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
												.sobrenome_hospede()));
								retorno = false;
							} else {
								if (valor.length() > 20) {
									msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.sobrenome_hospede(), 20));
									retorno = false;
								}
							}
							return retorno;
						}
					});
			txt_preferenciaHospede = new FormTextBox("txt_preferenciaHospede_" + num_quarto,
					I18nMessages.INSTANCE.help_preferencia_hospede(num_quarto),
					50, new FormWidget.HandlerValidation<String>() {
						@Override
						public boolean handle(String valor) {
							boolean retorno = true;
							if (valor == null || valor.trim().equals("")) {
								msg.setHTML(I18nMessages.INSTANCE
										.MSG_CAMPO_OBRIGATORIO(I18nMessages.INSTANCE
												.preferencia_hospede()));
								retorno = false;
							} else {
								if (valor.length() > 50) {
									msg.setHTML(I18nMessages.INSTANCE.MSG_TAMANHO_MAX_CAMPO(
											I18nMessages.INSTANCE
													.preferencia_hospede(), 50));
									retorno = false;
								}
							}
							return retorno;
						}
					});
			initWidget(vpa);
		}

		public void exec(int num_quarto, final FilterQuarto filterQuarto) {
			vpa.clear();
			qti_adultos = filterQuarto.getQtiAdulto();
			qti_crianca = filterQuarto.getListCrianca().size();
			vpa.add(super.getNome());
			vpa.add(gerarHTMLInfo(filterQuarto));
			vpa.add(gerarGridDadosCliente());
		}

		private HTML gerarHTMLInfo(final FilterQuarto filterQuarto) {
			String info = qti_adultos + I18nMessages.INSTANCE.adultos()
					+ qti_crianca + I18nMessages.INSTANCE.criancas() + "  ( ";

			for (int index = 0; index < qti_crianca; index++) {
				info += String
						.valueOf(filterQuarto.getListCrianca().get(index))
						+ " ";
			}
			info += " )";
			HTML infoHtml = new HTML(info);
			return infoHtml;
		}

		private Grid gerarGridDadosCliente() {
			Grid dadosCliente = new Grid(3, 2);
			dadosCliente.setHTML(0, 0, I18nMessages.INSTANCE.nome_hospede()
					+ ":");
			dadosCliente.setWidget(0, 1, this.txt_nomeHospede);
			dadosCliente.setHTML(1, 0,
					I18nMessages.INSTANCE.sobrenome_hospede() + ":");
			dadosCliente.setWidget(1, 1, this.txt_sobrenomeHospede);
			dadosCliente.setHTML(2, 0,
					I18nMessages.INSTANCE.preferencia_hospede() + ":");
			dadosCliente.setWidget(2, 1, this.txt_preferenciaHospede);
			return dadosCliente;
		}

		private boolean validar() {
			boolean retorno = false;
			if (txt_nomeHospede.validar() && txt_sobrenomeHospede.validar()
					&& txt_preferenciaHospede.validar()) {
				retorno = true;
			}
			return retorno;
		}

		private ReservaQuartoTO criarReservaQuartoTO(final QuartoTO quarto) {
			ReservaQuartoTO reservaQuartoTO = new ReservaQuartoTO();
			reservaQuartoTO.setNome(this.txt_nomeHospede.getValue());
			reservaQuartoTO.setSobrenome(this.txt_sobrenomeHospede.getValue());
			reservaQuartoTO.setQuarto(quarto);
			reservaQuartoTO.setQtiAdultos(this.qti_adultos);
			reservaQuartoTO.setQtiCrianca(this.qti_crianca);
			return reservaQuartoTO;
		}

	}

}

